<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
		"http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<title>doh.robot MultiSelect Test</title>

		<style>
			@import "../../../../util/doh/robot/robot.css";
		</style>

		<!-- required: dojo.js -->
		<script type="text/javascript" src="../../../../dojo/dojo.js"
			djConfig="isDebug: true, parseOnLoad: true"></script>

		<script type="text/javascript" src="../../helpers.js"></script>

		<script type="text/javascript">
			dojo.require("dijit.robotx");

			function testInverted(allOptions, selected, newSelected) {
				doh.is(allOptions.length, selected.length+newSelected.length); //newSelected + the no longer selected list size should be the same as the length of the whole list
				dojo.forEach(allOptions, function(option){ //verify the selections were inverted
					if(option.selected) {
						//it must be in the newSelectedList
						var found=false;
						dojo.forEach(newSelected, function(ns){
							if(option.value===ns) {
								found=true;
							}
						});
						doh.t(found);
					} else {
						//it better be in the origional selected list
						var found=false;
						dojo.forEach(selected, function(s){
							if(option.value===s) {
								found=true;
							}
						});
						doh.t(found);
					}
				});
			}

			dojo.addOnLoad(function(){
				doh.robot.initRobot('../test_MultiSelect.html');

				doh.register("dijit.form.MultiSelect", [
					{
						name: "tabInSelect",
						timeout: 6000,
						runTest: function(){
							var d = new doh.Deferred();

							var changed = false;
							dijit.byId("select").set("onChange", function(e){changed = true; });

							dojo.global.scrollTo(0,0);
							doh.robot.mouseMove(30,30);
							doh.robot.mouseClick({left:true}, 1000); //tabbing in doesn't work in FF unless we first click on the page first

							doh.robot.keyPress(dojo.keys.TAB, 1000, {});
							doh.robot.keyPress(dojo.keys.DOWN_ARROW, 1000, {}); //Arrowing down will select the element for IE, FF, Safari, & chrome
							doh.robot.keyPress(dojo.keys.SPACE, 1000, {}); //Space is needed to select the element in opera

							doh.robot.sequence(d.getTestCallback(function(){
								doh.t(changed);
							}), 1000);
							return d;
						}
					},
					{
						name: "switchRight",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							doh.robot.sequence(function(){ 
								dijit.byId('select').set('value', ['16']);
							}, 500);

							doh.robot.mouseMoveAt("right", 1000);
							doh.robot.mouseClick({left:true}, 500);

							var selectedValue2 = "";
							doh.robot.sequence(function(){ selectedValue2 = dijit.byId('select2').get('value');}, 1000); 

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("16", selectedValue2[0]);
							}), 1000);
							return d;
						}
					},
					{
						name: "switchLeft",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							doh.robot.sequence(function(){ 
								dijit.byId('select2').set('value', ['3','7','19','47']);
							}, 500);

							doh.robot.mouseMoveAt("left", 1000);
							doh.robot.mouseClick({left:true}, 500);

							var selectedValue = "";
							doh.robot.sequence(function(){ selectedValue = dijit.byId('select').get('value');}, 1000); 

							doh.robot.sequence(d.getTestCallback(function(){
								doh.is("3", selectedValue[0]);
								doh.is("7", selectedValue[1]);
								doh.is("19", selectedValue[2]);
								doh.is("47", selectedValue[3]);
							}), 1000);
							return d;
						}
					},
					{
						name: "invertSelected",
						timeout: 8000,
						runTest: function(){
							var d = new doh.Deferred();

							//select a block in the first list
							doh.robot.sequence(function(){ 
								dijit.byId('select').set('value', ['18','14','12','10']);
							}, 500);

							//get the selected list
							var allOptions = "";
							var selected = "";
							var newSelected = "";
							doh.robot.sequence(function(){ 
								selected = dijit.byId('select').get('value'); 
								allOptions = dijit.byId('select').domNode.options;
							}, 1000); 

							doh.robot.mouseMoveAt("i1", 1000);
							doh.robot.mouseClick({left:true}, 500);

							doh.robot.sequence(function(){ 
								newSelected = dijit.byId('select').get('value'); 
							}, 1000); 

							doh.robot.sequence(d.getTestCallback(function(){
								testInverted(allOptions, selected, newSelected);
							}), 1000);
							return d;
						}
					},
					{
						name: "invertSelected2",
						timeout: 8000,
						runTest: function(){
							var d = new doh.Deferred();

							//select random options
							doh.robot.sequence(function(){ 
								dijit.byId('select').set('value', ['2','8','14','20','22','32']);
							}, 500);

							//get the selected list
							var allOptions = "";
							var selected = "";
							var newSelected = "";
							doh.robot.sequence(function(){ 
								selected = dijit.byId('select').get('value'); 
								allOptions = dijit.byId('select').domNode.options;
							}, 1000); 

							doh.robot.mouseMoveAt("i1", 1000);
							doh.robot.mouseClick({left:true}, 500);

							doh.robot.sequence(function(){ 
								newSelected = dijit.byId('select').get('value'); 
							}, 1000); 

							doh.robot.sequence(d.getTestCallback(function(){
								testInverted(allOptions, selected, newSelected);
							}), 1000);
							return d;
						}
					},
					{
						name: "invertSelected3",
						timeout: 8000,
						runTest: function(){
							var d = new doh.Deferred();

							//Select the first thing in the list and then invert it
							//select random options
							doh.robot.sequence(function(){ 
								dijit.byId('select3').set('value', ['TN']);
							}, 500);

							//get the selected list
							var allOptions = "";
							var selected = "";
							var newSelected = "";
							doh.robot.sequence(function(){ 
								selected = dijit.byId('select3').get('value'); 
								allOptions = dijit.byId('select3').domNode.options;
							}, 1000); 

							doh.robot.mouseMoveAt("i3", 1000);
							doh.robot.mouseClick({left:true}, 500);

							doh.robot.sequence(function(){ 
								newSelected = dijit.byId('select3').get('value'); 
							}, 1000); 

							doh.robot.sequence(d.getTestCallback(function(){
								testInverted(allOptions, selected, newSelected);
							}), 1000);
							return d;
						}
					},
					{
						name: "setValue",
						timeout: 5000,
						runTest: function(){
							var d = new doh.Deferred();

							//Select only one thing in the list to make sure we don't start with the values that we are going to select
							doh.robot.sequence(function(){ 
								dijit.byId('select3').set('value', ['CA']);
							}, 500);

							doh.robot.mouseMoveAt("s1", 1000);
							doh.robot.mouseClick({left:true}, 500);

							doh.robot.sequence(d.getTestCallback(function(){
								var selected = dijit.byId('select3').get('value');
								doh.is(2, selected.length);
								doh.is(selected[0], 'VA');
								doh.is(selected[1], 'WA');
							}), 1000);
							return d;
						}
					},
					{
						name: "formSubmit",
						timeout: 1500,
						runTest: function(){
							var d=new doh.Deferred();
							dijit.byId('select3').set('value', ['TN','FL']);

							doh.robot.sequence(d.getTestCallback(function(){
									var vals = dojo.fromJson(dojo.formToJson("test"));
									doh.is("TN,FL", vals.select3);
							}), 500);
							return d;
						}
					}

				]);

				doh.run();
			});
		</script>
	</head>
</html>
